package com.fantastic.common.utils;

import java.time.LocalDate;

/**
 * @author: rxx
 * @since: 2024/6/19 15:41
 * @description: 订单工具类
 */
public class OrdersUtil {
    /**
     * 生成完整的订单号
     *
     * @param maxOrderId 数据库倒叙查询出来的订单编号
     * @return
     */
    public static String getOrdersId(String maxOrderId) {
        String orderId = "";
        if (maxOrderId == null || maxOrderId == "") {
            orderId = getOrderNumPrefix() + "0001";
        } else {
            orderId = getOrderNumPrefix() + getOrderEndNumber(maxOrderId);
        }
        return orderId;
    }

    /**
     * 获取订单号的前缀。
     *
     * @return
     */
    public static String getOrderNumPrefix() {
        //获取当前时间，并转换为String类型
        String dateChar = String.valueOf(LocalDate.now());
        //将 - 替换为空字符
        return dateChar.replace("-", "");
    }


    /**
     * 获取订单号的尾号
     *
     * @param maxOrderId 数据库倒叙查询出来的订单编号
     * @return
     */
    public static String getOrderEndNumber(String maxOrderId) {
        //对订单编号进行截取，只截取时间后的字符串
        maxOrderId = maxOrderId.substring(8, maxOrderId.length());
        //转为long类型后+1
        long newOrderId = Long.valueOf(maxOrderId) + 1;
        //进行缺少位数补齐
        return tabOrderId(newOrderId);
    }

    /**
     * 检查是否位数不足，不足前面补零
     *
     * @param newOrderId 最大的订单编号（未补齐位数的状态）
     * @return
     */
    public static String tabOrderId(long newOrderId) {
        //将long转换StringBuffer
        StringBuffer orderId = new StringBuffer(String.valueOf(newOrderId));
        //判断位数小于4，小于进入循环进行补齐
        if (orderId.length() < 4) {
            //遍历4次
            for (int i = 0; i < 4; i++) {
                //判断位数是否小于4
                if (orderId.length() < 4) {
                    //使用insert方法往前添加0
                    orderId.insert(0, "0");
                } else {//不小于4自动跳出
                    break;
                }
            }
        }
        return String.valueOf(orderId);
    }

}
